package com.curd.tk.base.service.impl.tkpackaging;

import com.github.pagehelper.Page;
import com.github.pagehelper.PageInfo;
import tk.mybatis.mapper.entity.Condition;

import java.util.List;

public interface PackagingService<DOMAIN, ID>  {
    /**
     * 持久化
     * @param entity
     */
    int save(DOMAIN entity);

    /**
     * 批量持久化
     * @param entitys
     */
    int save(List<DOMAIN> entitys);

    /**
     * 通过主鍵刪除
     * @param id
     */
    int deleteById(ID id);

    /**
     * 删除全部
     * @return
     */
    int deleteAll();

    /**
     * 批量刪除 eg：ids -> “1,2,3,4”
     * @param ids
     */
    int deleteByIds(ID []ids);

    /**
     * 更新
     * @param model
     */
    int update(DOMAIN model);

    /**
     * 通过ID查找
     * @param id
     * @return
     */
    DOMAIN findById(ID id);

    /**
     * 通过Model中某个成员变量名称（非数据表中column的名称）查找,value需符合unique约束
     * @param fieldName
     * @param value
     * @return
     * @throws Exception
     */
    DOMAIN findBy(String fieldName, Object value) throws Exception;

    /**
     * 通过多个ID查找//eg：ids -> “1,2,3,4”
     * @param ids
     * @return
     */
    List<DOMAIN> findByIds(String ids);

    /**
     * 根据条件查找
     * @param condition
     * @return
     */
    List<DOMAIN> findByCondition(Condition condition);

    /**
     * //获取所有
     * @return
     */
    List<DOMAIN> findAll();


    /**
     * GitHub 分页插件
     * @param page
     * @param size
     * @return
     */
    PageInfo<DOMAIN> findByPage(int page, int size);

    /**
     * GitHub 分页插件
     * @param page
     * @return
     */
    PageInfo<DOMAIN> findByPage(Page<DOMAIN> page);
}
